﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace QLBH
{
    [Serializable]
    public partial class HoaDon : UserControl
    {
        #region khai báo biến
        IQcollections dc = new ICollection();
        private CHoadon Hd;
        #endregion
        #region constructor
        public HoaDon()
        {
            InitializeComponent();
            load_Infohd();
        }
        #endregion
        #region hàm làm mới
        private void refesh()
        {
            tShd.Text = "";
            dNhd.Value = DateTime.Now;
            tTg.Text = "";
            cMkh.Text = "";
            cMnv.Text = "";
        }
        #endregion
        #region hàm load thông tin
        private void load_Infohd()
        {
            dc.Load("HoaDon.a");
            //
            load_GridHd();
        }
        private void load_GridHd()
        {
            if (dc != null)
            {
                dc.Load("HoaDon.a");
                DataTable tb = new DataTable("hoa don");
                DataColumn colNH = new DataColumn("Số HD");
                DataColumn colDH = new DataColumn("Ngày HD");
                DataColumn colCN = new DataColumn("Mã NV"); ;
                DataColumn colCK = new DataColumn("Mã KH");
                DataColumn colM = new DataColumn("Trị Giá");
                tb.Columns.Add(colNH);
                tb.Columns.Add(colDH);
                tb.Columns.Add(colCN);
                tb.Columns.Add(colCK);
                tb.Columns.Add(colM);

                foreach (CHoadon hd in dc)
                {
                    DataRow row = tb.NewRow();
                    row["Số HD"] = hd.SoHD;
                    row["Ngày HD"] = hd.NgayHD.ToString().Substring(0, 10);
                    row["Mã NV"] = hd.MaNV;
                    row["Mã KH"] = hd.MaKH;
                    row["Trị Giá"] = hd.TriGia;
                    //
                    tb.Rows.Add(row);
                }
                dGVHD_kq.DataSource = tb;
            }
        }
        #endregion
        #region thêm
        public void ThemHd()
        {
            ICT ct = new DCT();
            ct.Load("CTHD.a");
            Hd = new CHoadon();
            Hd.SoHD = int.Parse(tShd.Text);
            Hd.MaNV = cMnv.Text;
            Hd.NgayHD = dNhd.Value.Date;
            Hd.MaKH = cMkh.Text;

            Hd.TriGia = 0;

            dc.Add(Hd);
            dc.Save("HoaDon.a");
            this.load_GridHd();
        }
        #endregion
        #region xóa
        private int xoaHd()
        {
            int i;

            if (tShd.Text == "")
            {
                MessageBox.Show("Nhập số hóa đơn cần xóa!", "Thông Báo");
            }
            else if (tShd.Text != "")
            {
                for (i = 0; i < dc.Count; i++)
                {
                    if (dc[i].SoHD == int.Parse(tShd.Text))
                        return i;
                }
                MessageBox.Show("Không tìm thấy hóa đơn cần xóa!", "Thông Báo");
            }
            return -1;
        }
        #endregion
        #region sửa
        private int sua()
        {
            int i;

            if (tShd.Text == "")
            {
                MessageBox.Show("Chọn hóa đơn cần sửa!", "Thông Báo");
            }
            else
            {
                for (i = 0; i < dc.Count; i++)
                {
                    for (i = 0; i < dc.Count; i++)
                    {
                        if (dc[i].SoHD == int.Parse(tShd.Text))
                            return i;
                    }
                }
                MessageBox.Show("Không tìm thấy hóa đơn cần sửa!", "Thông Báo");
            }
            return -1;
        }
        #endregion
        #region sự kiện click
        private void bThem_Click(object sender, EventArgs e)
        {
            if (cMkh.Text == "" || cMnv.Text == "" || tShd.Text == "" || tTg.Text == "")
                MessageBox.Show("Bạn chưa nhập đủ thông tin!", "Thông Báo");
            else
            {
                if (TesHL())
                {
                    ThemHd();
                    load_GridHd();
                    MessageBox.Show("Thêm thành công!");
                }
            }
        }

        private void bXoa_Click(object sender, EventArgs e)
        {
            if (xoaHd() != -1)
            {
                dc.RemoveAt(xoaHd());
                refesh();
                dc.Save("HoaDon.a");
                this.load_GridHd();
                MessageBox.Show("Đã xóa thành công!", "Thông Báo");
            }
        }

        private void bSua_Click(object sender, EventArgs e)
        {
            if (sua() != -1)
            {
                int i = sua();
                //update info
                dc[i].TriGia = Int32.Parse(tTg.Text);
                dc[i].NgayHD = dNhd.Value.Date;
                dc[i].MaKH = cMkh.Text;
                dc[i].MaNV = cMnv.Text;
                refesh();
                dc.Save("HoaDon.a");
                //
                this.load_GridHd();
                MessageBox.Show("Đã sửa thông tin thành công!", "Thông Báo");
            }
        }

        private void bLM_Click(object sender, EventArgs e)
        {
            refesh();
            load_GridHd();
        }

        private void tTg_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void cMkh_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void cMnv_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void dGVHD_kq_Click(object sender, EventArgs e)
        {
            if (dGVHD_kq.SelectedRows.Count > 0)
            {
                DataGridViewRow row = dGVHD_kq.SelectedRows[0];
                int vtHang = dGVHD_kq.Rows.IndexOf(row);
                tShd.Text = dGVHD_kq[0, vtHang].Value.ToString();
                dNhd.Text = dGVHD_kq[1, vtHang].Value.ToString();
                cMnv.Text = dGVHD_kq[2, vtHang].Value.ToString();
                cMkh.Text = dGVHD_kq[3, vtHang].Value.ToString();
                tTg.Text = dGVHD_kq[4, vtHang].Value.ToString();
            }
        }

        private void cMkh_Click(object sender, EventArgs e)
        {
            IKh lk = new Tes1();
            lk.Load("KhachHang.a");
            cMkh.Items.Clear();
            foreach (CKhachhang kh in lk)
            {
                cMkh.Items.Add(kh.Makh);
            }
        }

        private void cMnv_Click(object sender, EventArgs e)
        {
            INV ln = new DNhanVien();
            ln.Load("NhanVien.a");
            cMnv.Items.Clear();
            foreach (CNhanVien nv in ln)
            {
                cMnv.Items.Add(nv.MaNv);
            }
        }
        #endregion
        #region Kiểm tra số HD hợp lệ
        private bool TesHL()
        {
            foreach (CHoadon hd in dc)
            {
                if (tShd.Text == hd.SoHD.ToString())
                {
                    MessageBox.Show("Đã tồn tại số hóa đơn này!", "Thông Báo", MessageBoxButtons.OK);
                    tShd.Text = "";
                    return false;
                }
            }
            return true;
        }
        #endregion
    }
}
